package com.share.netdisk.reclaim.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.share.constant.Result;
import com.share.netdisk.reclaim.model.Reclaim;
import com.share.netdisk.reclaim.service.ReclaimService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

@Slf4j
@RestController
@RequestMapping("/reclaim")
public class ReclaimController {

	@Autowired
	private ReclaimService reclaimService;

	// 根据用户ID分页展示回收站列表
	@GetMapping("/user/{userId}")
	public Page<Reclaim> getFilesByUserId(
			@PathVariable Integer userId,
			@RequestParam(defaultValue = "") String keyword, // 新增关键词参数
			@RequestParam(defaultValue = "1") Integer pageNum,
			@RequestParam(defaultValue = "10") Integer pageSize
	) {
		return reclaimService.getFilesByUserId(userId, keyword, pageNum, pageSize);
	}


	// 删除回收站的数据，多个reclaimId用逗号隔开
	@DeleteMapping("/delete")
	public Result deleteReclaim(@RequestParam(value = "reclaims", required = true) String reclaimIds) {
		System.out.println("接收到的回收ID：" + reclaimIds);  // 打印接收到的回收ID
		if (reclaimIds == null || reclaimIds.trim().isEmpty()) {
			return Result.fail(400, "参数 'reclaims' 缺失或为空", null);
		}

		try {
			// 将逗号分隔的字符串转换为整数列表
			List<Integer> ids = Arrays.stream(reclaimIds.split(","))
					.map(String::trim)
					.map(Integer::parseInt)
					.collect(Collectors.toList());

			// 验证列表的大小（可选，限制为最多100个ID）
			if (ids.size() > 100) {
				return Result.fail(413, "请求中ID数量过多，限制为100个", null);
			}

			// 删除文件
			boolean result = reclaimService.permanentlyDeleteReclaims(ids);
			if (!result) {
				return Result.fail(404, "未找到提供的文件ID", null);
			}
			return Result.ok("文件删除成功: " + ids);

		} catch (NumberFormatException e) {
			return Result.fail(400, "无效的回收ID格式: " + e.getMessage(), null);
		} catch (Exception e) {
			// 记录异常（例如 logger.error("删除回收文件时出错", e)）
			return Result.fail(500, "删除文件时发生错误: " + e.getMessage(), null);
		}
	}



	//删除所有的数据
//	@GetMapping("/deleteAll/{userId}")
//	public boolean deleteAllReclaim(@PathVariable Integer userId) {
//		return reclaimService.removeByMap(null);
//	}
}
